package com.cwj.os.coursedesgin.texteditor;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.filechooser.FileNameExtensionFilter;

//  文本编辑器类

public class TextFileOpener extends JFrame {
    private static final long serialVersionUID = -9077023825514749548L;
    private final JTextArea ta_showText;    //定义显示文件属性的文本域
    private final JTextArea ta_showProperty;    //定义显示文件内容的文本域
    private String path="./cc";



    //Launch the application.
    public static void main(String[] args) {
        TextFileOpener frame = new TextFileOpener("Bridge_lef.txt");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//        while (new Scanner(System.in).next() != null) System.out.println("hhhhh");
//        ;
    }


    public TextFileOpener(String path) {
        this.path = path;
        setTitle("文本编辑器");    //设置窗体标题
        setBounds(100, 100, 400, 250);    //设置窗体位置和大小
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);    //设置窗体默认关闭方式
        final JMenuBar menuBar = new JMenuBar();    //创建菜单栏
        setJMenuBar(menuBar);    //把菜单栏放到窗体上
        final JMenu mn_file = new JMenu();    //创建文件菜单
        mn_file.setText("文件");    //为文件菜单设置标题
        menuBar.add(mn_file);    //把文件菜单添加到菜单栏上
        final JMenuItem mi_open = new JMenuItem();    //创建保存
        // 菜单项
        mi_open.addActionListener(new ActionListener() {
            //为保存菜单项添加监听器
            public void actionPerformed(final ActionEvent arg0) {
                saveTextFile(path);    //调用方法，操作文件
            }
        });
        mi_open.setText("保存");    //设置保存菜单项的标题
        mn_file.add(mi_open);    //把保存菜单项添加到文件菜单
        mn_file.addSeparator();    //添加菜单分隔符
        final JMenuItem mi_exit = new JMenuItem();    //创建退出菜单项
        mi_exit.addActionListener(new ActionListener() {
            //为退出菜单项添加监听器
            public void actionPerformed(final ActionEvent arg0) {
                dispose();
            }
        });
        mi_exit.setText("退出");    //设置退出菜单项的标题
        mn_file.add(mi_exit);    //把退出菜单项添加到文件菜单
        final JMenu mn_edit = new JMenu();    //创建编辑菜单
        mn_edit.setText("编辑");    //为编辑菜单设置标题
        menuBar.add(mn_edit);    //把编辑菜单添加到菜单栏上
        final JMenuItem mi_copy = new JMenuItem();    //创建复制菜单项
        mi_copy.setText("复制");    //设置复制菜单项的标题
        mn_edit.add(mi_copy);    //把复制菜单项添加到编辑菜单
        final JMenuItem mi_cut = new JMenuItem();    //创建剪切菜单项
        mi_cut.setText("剪切");    //设置剪切菜单项的标题
        mn_edit.add(mi_cut);    //把剪切菜单项添加到编辑菜单
        final JMenuItem mi_paste = new JMenuItem();    //创建粘贴菜单项
        mi_paste.setText("粘贴");    //设置粘贴菜单项的标题
        mn_edit.add(mi_paste);    //把粘贴菜单项添加到编辑菜单
        final JToolBar toolBar = new JToolBar();    //创建工具栏
        getContentPane().add(toolBar, BorderLayout.NORTH);    //把工具栏放到窗体上方
        final JButton btn_open = new JButton();    //创建工具按钮

        btn_open.addActionListener(new ActionListener()
        {
            //添加动作监听器
            public void actionPerformed(final ActionEvent arg0)
            {
                saveTextFile(path);    //调用方法，操作文件
            }
        });

        btn_open.setText("  保   存  ");    //设置工具按钮的标题
        toolBar.add(btn_open);    //把工具按钮添加到工具栏上
        final JButton btn_exit = new JButton();    //创建工具按钮
        btn_exit.addActionListener(new ActionListener() {
            //添加动作监听器
            public void actionPerformed(final ActionEvent arg0) {
                dispose();   //退出系统
            }
        });
        btn_exit.setText("  退  出  ");    //设置工具按钮的标题
        toolBar.add(btn_exit);    //把工具按钮添加到工具栏上
        final JTabbedPane tabbedPane = new JTabbedPane();    //创建选项卡面板
        getContentPane().add(tabbedPane, BorderLayout.CENTER);    //把选项卡面板放到窗体中央
        final JScrollPane scrollPane1 = new JScrollPane();    //创建滚动面板
        //把滚动面板放到选项卡的第一个选项页
        tabbedPane.addTab("文件的属性", null, scrollPane1, null);
        ta_showProperty = new JTextArea();    //创建文本域
        //把文本域添加到滚动面板的视图中
        scrollPane1.setViewportView(ta_showProperty);
        final JScrollPane scrollPane2 = new JScrollPane();    //创建滚动面板
        //把滚动面板放到选项卡的第二个选项页
        tabbedPane.addTab("文件的内容", null, scrollPane2, null);
        ta_showText = new JTextArea();    //创建文本域
        //把文本域添加到滚动面板的视图中
        scrollPane2.setViewportView(ta_showText);

        openTextFile();    //调用方法，操作文件

    }

    //用于打开文件并获得文件信息的方法
    public void openTextFile() {

        //判断用户是否选择了文件
        File file = new File(path);//fileChooser.getSelectedFile();    //获得文件对象
        System.out.println("vim -- open");
        if(!file.exists()){
            try {
                System.out.println("create");
                System.out.println(file.createNewFile());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("****************");

       this.updatePage(file);

        try (
              BufferedReader in = new BufferedReader(new FileReader(file));
                ){

            String info = in.readLine();    //从文件中读取一行信息
            while (info != null) {
                //判断是否读到内容
                ta_showText.append(info + "\n");    //把读到的信息追加到文本域中
                info = in.readLine();    //继续读下一行信息
            }

        }catch (FileNotFoundException e){
            System.out.println("拒绝范问");
        }catch (Exception ex) {
            ex.printStackTrace();    //输出栈踪迹
        }


    }

    public void updatePage(File file){
        ta_showProperty.setText("");
        //获得文件的绝对路径
        ta_showProperty.append("文件的绝对路径是：" + file.getAbsolutePath() + "\n");
        //是否为隐藏文件
        ta_showProperty.append("该文件是隐藏文件吗？" + file.isHidden() + "\n");
        ta_showProperty.append("文件长度:" + file.length());
    }

    public void saveTextFile(String path){
        try(BufferedWriter out = new BufferedWriter(new FileWriter(path))){
            out.write(ta_showText.getText());
        } catch (IOException e) {
            e.printStackTrace();
        }
        this.updatePage(new File(path));
    }
}